package com.yb.basic;

public class SubClassTest extends ClassTest {

    /**
     * 报错提示：父类构造器不可覆盖
     */
//    @Override
//    public ClassTest() {
//        System.out.println("覆盖父类构造方法");
//    }

    /**
     * 报错提示：父类的静态方法不能覆盖
     */
//    @Override
//    public static void staticMethod() {
//        System.out.println("覆盖父类静态方法");
//    }

    /**
     * 上面的@Override去掉，不再报错
     * 说明这个方法只是和父类的静态方法同名了而已，他是子类独有的，与父类的没半毛钱关系
     * 如果决定覆盖，请敲上@Override,一般做项目也不会像我这样测这些奇怪的情况，所以不加也知道是覆盖了，但是还是请加上
     */
//    public static void staticMethod() {
//        System.out.println("子类的同名方法");
//    }

    /**
     * 报错提示：final方法不能被覆盖
     */
//    @Override
//    public final void finalMethod() {
//        System.out.println("覆盖final方法");
//    }

    /**
     * 未加@Override
     * 错误提示：final方法不能覆盖
     * 说明子类的final方法连名字都不能跟父类的同名,否则认为是覆盖
     */
//    public final void finalMethod() {
//        System.out.println("覆盖final方法");
//    }

    /**
     * 未加@Override
     * 父类中该方法是private final的
     * 子类可以拥有对应的public权限的final同名方法
     */
//    public final void finalMethod0() {
//        System.out.println("调用子类同名的final方法");
//    }

    /**
     * 错误提示：父类私有方法不能被覆盖
     */
    //@Override
    public void privateMethod() {
        System.out.println("调用普通的private方法");
        this.finalMethod();
    }

}

